--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
visualiser-wasm/internal/filter/hop.go dev (9051d6cc) Text, 1.95 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e// Package filter implements hop and search filters for the network visualiser.
Tff7b72package Te6edf3filter
Tff7b72import Ta5d6ff"strings"
T8b949e// PathEntry is a compact path-table row.
Tff7b72type Te6edf3PathEntry Tff7b72struct Tb4b4b4{
Te6edf3Hash Tffa657string Ta5d6ff`json:"hash"`
Te6edf3Interface Tffa657string Ta5d6ff`json:"interface"`
Te6edf3Hops Tff7b72*Tffa657float64 Ta5d6ff`json:"hops"`
Tb4b4b4}
T8b949e// PathHashesWithinHopFilter returns unique destination hashes within hopMax.
T8b949e// A nil hopMax means no hop ceiling. Rows with nil hops are skipped.
Tff7b72func Te6edf3PathHashesWithinHopFilterTb4b4b4(Te6edf3pathTable Tb4b4b4[Tb4b4b4]Te6edf3PathEntryTb4b4b4, Te6edf3hopMax Tff7b72*Tffa657float64Tb4b4b4) Tb4b4b4[Tb4b4b4]Tffa657string Tb4b4b4{
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTableTb4b4b4) Tff7b72== T79c0ff0 Tb4b4b4{
Tff7b72return Tff7b72nil
Tb4b4b4}
Te6edf3seen Tff7b72:= Tffa657makeTb4b4b4(Tffa657mapTb4b4b4[Tffa657stringTb4b4b4]Tff7b72structTb4b4b4{Tb4b4b4}Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3pathTableTb4b4b4)Tff7b72/T79c0ff2Tff7b72+T79c0ff1Tb4b4b4)
Te6edf3out Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Tffa657stringTb4b4b4, T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3pathTableTb4b4b4)Tff7b72/T79c0ff4Tff7b72+T79c0ff1Tb4b4b4)
Tff7b72for Te6edf3i Tff7b72:= Tff7b72range Te6edf3pathTable Tb4b4b4{
Te6edf3e Tff7b72:= Tff7b72&Te6edf3pathTableTb4b4b4[Te6edf3iTb4b4b4]
Tff7b72if Te6edf3eTb4b4b4.Te6edf3Hops Tff7b72== Tff7b72nil Tff7b72|| Te6edf3eTb4b4b4.Te6edf3Hash Tff7b72== Ta5d6ff"" Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Tff7b72if Te6edf3hopMax Tff7b72!= Tff7b72nil Tff7b72&& Tff7b72*Te6edf3eTb4b4b4.Te6edf3Hops Tff7b72> Tff7b72*Te6edf3hopMax Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Tff7b72if Te6edf3_Tb4b4b4, Te6edf3ok Tff7b72:= Te6edf3seenTb4b4b4[Te6edf3eTb4b4b4.Te6edf3HashTb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Te6edf3seenTb4b4b4[Te6edf3eTb4b4b4.Te6edf3HashTb4b4b4] Tff7b72= Tff7b72structTb4b4b4{Tb4b4b4}Tb4b4b4{Tb4b4b4}
Te6edf3out Tff7b72= Tffa657appendTb4b4b4(Te6edf3outTb4b4b4, Te6edf3eTb4b4b4.Te6edf3HashTb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3out
Tb4b4b4}
T8b949e// MatchesSearch reports whether text matches queryLower (already lowercased).
T8b949e// An empty query matches everything.
T8b949e// ASCII-only text avoids allocating a lowered copy.
Tff7b72func Te6edf3MatchesSearchTb4b4b4(Te6edf3queryLowerTb4b4b4, Te6edf3text Tffa657stringTb4b4b4) Tffa657bool Tb4b4b4{
Tff7b72if Te6edf3queryLower Tff7b72== Ta5d6ff"" Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72if Te6edf3text Tff7b72== Ta5d6ff"" Tb4b4b4{
Tff7b72return Tff7b72false
Tb4b4b4}
Tff7b72if Te6edf3isASCIITb4b4b4(Te6edf3textTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3containsFoldASCIITb4b4b4(Te6edf3textTb4b4b4, Te6edf3queryLowerTb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3stringsTb4b4b4.Te6edf3ContainsTb4b4b4(Te6edf3stringsTb4b4b4.Te6edf3ToLowerTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4, Te6edf3queryLowerTb4b4b4)
Tb4b4b4}
Tff7b72func Te6edf3isASCIITb4b4b4(Te6edf3s Tffa657stringTb4b4b4) Tffa657bool Tb4b4b4{
Tff7b72for Te6edf3i Tff7b72:= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Tffa657lenTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4; Te6edf3iTff7b72++ Tb4b4b4{
Tff7b72if Te6edf3sTb4b4b4[Te6edf3iTb4b4b4] Tff7b72>= T79c0ff0x80 Tb4b4b4{
Tff7b72return Tff7b72false
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72func Te6edf3containsFoldASCIITb4b4b4(Te6edf3haystackTb4b4b4, Te6edf3needleLower Tffa657stringTb4b4b4) Tffa657bool Tb4b4b4{
Te6edf3n Tff7b72:= Tffa657lenTb4b4b4(Te6edf3needleLowerTb4b4b4)
Tff7b72if Te6edf3n Tff7b72== T79c0ff0 Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tff7b72if Te6edf3n Tff7b72> Tffa657lenTb4b4b4(Te6edf3haystackTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72false
Tb4b4b4}
Tff7b72for Te6edf3i Tff7b72:= T79c0ff0Tb4b4b4; Te6edf3iTff7b72+Te6edf3n Tff7b72<= Tffa657lenTb4b4b4(Te6edf3haystackTb4b4b4)Tb4b4b4; Te6edf3iTff7b72++ Tb4b4b4{
Te6edf3ok Tff7b72:= Tff7b72true
Tff7b72for Te6edf3j Tff7b72:= T79c0ff0Tb4b4b4; Te6edf3j Tff7b72< Te6edf3nTb4b4b4; Te6edf3jTff7b72++ Tb4b4b4{
Te6edf3c Tff7b72:= Te6edf3haystackTb4b4b4[Te6edf3iTff7b72+Te6edf3jTb4b4b4]
Tff7b72if Te6edf3c Tff7b72>= Ta5d6ff'A' Tff7b72&& Te6edf3c Tff7b72<= Ta5d6ff'Z' Tb4b4b4{
Te6edf3c Tff7b72+= Ta5d6ff'a' Tff7b72- Ta5d6ff'A'
Tb4b4b4}
Tff7b72if Te6edf3c Tff7b72!= Te6edf3needleLowerTb4b4b4[Te6edf3jTb4b4b4] Tb4b4b4{
Te6edf3ok Tff7b72= Tff7b72false
Tff7b72break
Tb4b4b4}
Tb4b4b4}
Tff7b72if Te6edf3ok Tb4b4b4{
Tff7b72return Tff7b72true
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72false
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────